package com.example.adminframework.util;

import com.example.adminframework.model.bo.ParamsBO;
import org.springframework.util.ObjectUtils;

import java.util.List;

/**
 * 类描述：分页工具类
 */
public class PageUtil {
    /**
     * 分页参数如果没有传入，设置默认值
     *
     * @param paramsBO 参数个数
     */
    public static void pageValidation(ParamsBO paramsBO) {
        if (ObjectUtils.isEmpty(paramsBO.getCurrentPage()) || paramsBO.getCurrentPage() <= 0) {
            paramsBO.currentPage(1);
        }
        if (ObjectUtils.isEmpty(paramsBO.getPageSize()) || paramsBO.getPageSize() <= 0) {
            paramsBO.pageSize(20);
        }
    }

    /**
     * 分页并判断长度
     *
     * @param data  数据
     * @param params 参数
     * @return {@link List <T>}
     */
    public static <T> List<T> pageInfo(List<T> data, ParamsBO params) {
        //分页参数如果没有传入，设置默认值(current=1,size=20)
        pageValidation(params);
        //总长度
        int total = data.size();
        //获取单页大小和页码
        Integer size = params.getPageSize();
        if (total <= 0) {
            return data;
        }
        Integer current = params.getCurrentPage();
        //判断页码是否超过总长度
        if (size * current > total) {
            //获取最后一页的第一个索引
            int lastPage = total / size * size;
            return data.subList(lastPage, total);
        } else {
            //获取当前页码的第一个索引
            int currentPage = (current - 1) * size;
            return data.subList(currentPage, currentPage + size);
        }
    }

}
